package Persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import Negocio.Linea;
import Negocio.LineaTitular;
import Negocio.Usuario;
import Persistencia.AdministradorPersistenciaUsuario;
import Persistencia.PoolConnection;

public class AdministradorPersistenciaUsuario {
private static AdministradorPersistenciaUsuario pool;
	
	
	private AdministradorPersistenciaUsuario()
	{
		
	}
	public static AdministradorPersistenciaUsuario getInstancia()
	{
		if (pool== null)
			pool =new AdministradorPersistenciaUsuario();
		return pool;
	}
	
	public void insert(Usuario c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO Usuarios (nombre, apellido, dni, domicilio, telefono, mail) VALUES (?,?,?,?,?,?)" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,c.getNombre());
			ps.setString(2,c.getApellido());
			ps.setString(3,c.getDni());
			ps.setString(4,c.getDomicilio());
			ps.setString(5,c.getTelefono());
			ps.setString(6,c.getMail());
			//ps.setString(7,c.getLinea().getNumero());
			
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar Usuario: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Usuario: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
	}
	public void update(Usuario c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia Update en tabla destino
			String senten = "UPDATE Usuarios set nombre = ? ,apellido = ? ,domicilio = ? ,telefono = ?, mail = ? where dni = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,c.getNombre());
			ps.setString(2,c.getApellido());
			ps.setString(3,c.getDomicilio());
			ps.setString(4,c.getTelefono());
			ps.setString(5,c.getMail());
			ps.setString(6,c.getDni());
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Modificar Usuario: " + e.getMessage());
				System.out.println("Stack Trace al Modificar Usuario: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      
		
	}
	public void delete (Usuario c)
	{
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia insert en tabla destino
			String senten = "DELETE from Usuarios where dni = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,c.getDni());
			ps.execute();
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Borrar Usuario: " + e.getMessage());
				System.out.println("Stack Trace al Borrar Usuario: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      

	}
	
	public Usuario buscarUsuario(String dni)
	{
		Usuario c = null;
		Linea l = null;
		//Obtener conexion BD 
		Connection con = PoolConnection.getPoolConnection().getConnection();
		
		//Generar sentencia SQL
		try
		{
			//Preparar sentencia select en tabla destino
			String senten = "SELECT nombre,apellido,domicilio,telefono,dni,mail from Usuarios where dni = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1,dni);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{
				c = new Usuario();
				c.setNombre(result.getString("nombre"));
				c.setApellido(result.getString("apellido"));
            	c.setDni(dni);
				c.setDomicilio(result.getString("domicilio"));
				c.setTelefono(result.getString("telefono"));
				c.setMail(result.getString("mail"));
			}
			if (c != null) {
				ps = con.prepareStatement("SELECT numero,fecha_contrato from Lineas where dni = ?");		
				ps.setString(1,dni);
				result = ps.executeQuery();
				while (result.next())
				{
					l = new LineaTitular ();
					l.setFechaContrato(result.getDate("fecha_contrato"));
					l.setNumero(result.getString("numero"));
					c.setLinea(l);
				}
			}
			
			PoolConnection.getPoolConnection().realeaseConnection(con);
			return c;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Buscar Usuario: " + e.getMessage());
				System.out.println("Stack Trace al Buscar Usuario: " + e.getStackTrace());
				PoolConnection.getPoolConnection().realeaseConnection(con);
	      }
	      return c;
	}
	

}
